package org.dromara.demo.designPattern.责任链模式.controller;

import org.dromara.demo.designPattern.责任链模式.entity.AuthInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 审核规定；
 * 1. 601-610 三级审批 + 二级审批
 * 2. 611-620 三级审批 + 二级审批 + 一级审批
 * 3. 其他时间 三级审批
 */
public abstract class AuthLink {
    protected Logger logger = LoggerFactory.getLogger(AuthLink.class);
    protected SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间格式化

    // 级别人员ID
    protected String levelUserId;
    // 级别人员姓名
    protected String levelUserName;

    private AuthLink next;

    // 责任链
    public AuthLink(String levelUserId, String levelUserName)
    {
        this.levelUserId = levelUserId;

        this.levelUserName = levelUserName;
    }
    public AuthLink next() {
        return next;
    }
    public AuthLink appendNext(AuthLink next) {
        this.next = next;
        return this;
    }
    public abstract AuthInfo doAuth(String uId, String orderId, Date authDate);
    /**
     * 这部分是责任链链接起来的核心部分。AuthLink next的重点在于可以
     * 通过next方式获取下一个链路需要处理的节点。
     * levelUserId、levelUserName 是责任链中的公用信息，标记每一个审
     * 批节点的人员信息。
     * 抽象类中定义了一个抽象方法abstract AuthInfo doAuth，是每一个实
     * 现者必须实现的类，不同的审批级别人员处理不同的业务
     */
}
